stridani barev v gridu
Otázka od: Aleš Kerner
20. 11. 2002 14:10
Zdravim
nevite prosim Vas nekdo, jak udelat stridani barev v gridu u radku, tzn. aby
byl treba 1 radek bily a 2. sedivy a 3. zase bily, uz se stim morim dost
dlouho a nemuzu s tim hnout.
Pokud nekdo mate, prosil bych i priklad.
Dik Ales
---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.419 / Virová báze: 235 - datum vydání: 13.11.2002
Odpovedá: David Michal
20. 11. 2002 14:26
Zdravim,
Ma se menit barva vzhledem k zobrazovanym datum? Nebo se proste maji stridat
tyto tri barvy?
V prvnim pripade vim a je to i v archivu konference, v druhem pripadu nevim.
David
nevite prosim Vas nekdo, jak udelat stridani barev v gridu u radku, tzn. aby
byl treba 1 radek bily a 2. sedivy a 3. zase bily, uz se stim morim dost
dlouho a nemuzu s tim hnout.
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.419 / Virus Database: 235 - Release Date: 13/11/2002
Odpovedá: Aleš Kerner
20. 11. 2002 15:01
samo, ze k aktualne zobrazovanym datum
> Zdravim,
> Ma se menit barva vzhledem k zobrazovanym datum? Nebo se proste maji
stridat
> tyto tri barvy?
> V prvnim pripade vim a je to i v archivu konference, v druhem pripadu
nevim.
> David
>
> nevite prosim Vas nekdo, jak udelat stridani barev v gridu u radku, tzn.
aby
> byl treba 1 radek bily a 2. sedivy a 3. zase bily, uz se stim morim dost
> dlouho a nemuzu s tim hnout.
Odpovedá: Ondrej Kelle
20. 11. 2002 15:13
> nevite prosim Vas nekdo, jak udelat stridani barev v gridu u
> radku, tzn. aby byl treba 1 radek bily a 2. sedivy a 3. zase
> bily, uz se stim morim dost dlouho a nemuzu s tim hnout.
Nepises, o aky grid sa jedna.
V pripade stringgridu si mozes napisat OnDrawCell napriklad takto
(DefaultDrawing je True):
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
const
RowColors: array[Boolean] of TColor = (clCream, clMoneyGreen);
begin
with Sender as TStringGrid do
begin
if not (gdFixed in State) and ((gdFocused in State) or not (gdSelected
in State)) then
begin
Canvas.Brush.Color := RowColors[(ARow - FixedRows) mod 2 = 0];
Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]);
end;
end;
end;
HTH
TOndrej
Odpovedá: Karel Horky
20. 11. 2002 15:50
Aleš Kerner, <mailto:kerner@metalcom.cz> napsal:
AK> nevite prosim Vas nekdo, jak udelat stridani barev v gridu u radku, tzn.
aby
AK> byl treba 1 radek bily a 2. sedivy a 3. zase bily, uz se stim morim dost
Ahoj, priklad viz nize, podobne ale najdes i v knize Delphi 1001 t&t
(priklad 822, 823). Tady se ti budou stridat zelena a cervena. Jen si
musis zjistit, jestli pri vykreslovani jsi na sudem nebo lichem radku :
Obsluha udalosti OnDrawColumnCell
procedure TUkaz.gridUkazDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
function StojimNaSudemRadku: Boolean
begin
{ nejaka funkce na zjisteni sudeho radku }
Result := (SudyRadek);
end;
begin
{spusti se s vykreslenim kazdeho sloupce }
with Sender as TDBGrid do begin
if StojimNaSudemRadku then
if gdSelected in State then begin
Canvas.Brush.Color := clHighLight;
Canvas.Font.Color := clLime;
end
else begin
Canvas.Brush.Color := clLime ;
Canvas.Font.Color := clInfoText;
end
else
if gdSelected in State then begin
Canvas.Brush.Color := clHighLight;
Canvas.Font.Color := clRed;
end
else begin
Canvas.Brush.Color := clRed ;
Canvas.Font.Color := clInfoText;
end;
end;
end;
gridUkaz.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
------
S pozdravem Karel Horky
horky.karel@quick.cz
W2K/SP2, D5Ent/UP1
Odpovedá: David Michal
20. 11. 2002 15:49
Zdravim,
Pak jak jsem psal, vse je v archivu konference. viz. www.delphi.cz .
Ale presto hodim priklad:
Nejdrive si vlastnost DefaultDrawing u DBGridu prepnete na False.
Pak je treba obslouzit udalost: OnDrawColumnCell u DBGridu. Napr.
procedure TFrm_Main.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
//pokud bude field Locked True pak se zaznam zobrazi s cervenym fontem
if DBGrid1.DataSource.DataSet.FieldByName('Locked').AsBoolean then
DBGrid1.Canvas.Font.Color := clRed;
//pokud by jste chtel vybarvit pozadi a ne font pak tam bude Brush misto
Font, spoustu dalsich moznosti najdete v napovede pod TCanvas
//nezapomenout zavolat puvodni funkci
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
samo, ze k aktualne zobrazovanym datum
> Zdravim,
> Ma se menit barva vzhledem k zobrazovanym datum? Nebo se proste maji
stridat
> tyto tri barvy?
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.419 / Virus Database: 235 - Release Date: 13/11/2002
Odpovedá: Robert Suska
20. 11. 2002 16:02
Ahoj !
Pouzi RXLib a z nej TRxDBGrid a ja som to robil nasledovnym kodom a tam sa
mi farby striedaju podla nejakych hodnot vo fieldoch
procedure TZmluvyDataForm.RxDBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var G: TDBGrid;
begin
inherited;
G:= Sender as TDBGrid;
if(DataModule2.ZmluvyTable1.
FieldByName('DOBA_PLATNOSTI_ZMLUVY').AsDateTime<NOW)
then
begin
if (gdSelected in State ) and (G.focused = TRUE) then
begin
G.Canvas.BRUSH.Color := clRed;
G.Canvas.Font.Color := clWhite;
end
else
G.Canvas.Font.Color := clRed;
G.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
if(DateToStr(DataModule2.ZmluvyTable1.FieldByName('DOBA_PLATNOSTI_ZMLUVY').
AsDateTime)=DateToStr(NOW))
then
begin
if (gdSelected in State ) and (G.focused = TRUE) then
begin
G.Canvas.BRUSH.Color := clGreen;
G.Canvas.Font.Color := clWhite;
end
else
G.Canvas.Font.Color := clGreen;
G.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
if(DataModule2.ZmluvyTable1.FieldByName('ZMLUVA_DO_NEURCITA').AsBoolean=True
)
then
begin
if (gdSelected in State ) and (G.focused = TRUE) then
begin
G.Canvas.BRUSH.Color := clBlue;
G.Canvas.Font.Color := clWhite;
end
else
G.Canvas.Font.Color := clBlue;
G.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
Ak som uplne mimo tak prosim za prepacenie
S pozdravom,
************************************
Robert Suska
KORAK SLOVAKIA s.r.o.
Horna 52
974 01 Banska Bystrica
www.korak.sk robert@korak.sk
Network administrator, Delphi programmer
************************************
> Zdravim,
> Pak jak jsem psal, vse je v archivu konference. viz. www.delphi.cz .
> Ale presto hodim priklad:
>
> Nejdrive si vlastnost DefaultDrawing u DBGridu prepnete na False.
> Pak je treba obslouzit udalost: OnDrawColumnCell u DBGridu. Napr.
>
> procedure TFrm_Main.DBGrid1DrawColumnCell(Sender: TObject;
> const Rect: TRect; DataCol: Integer; Column: TColumn;
> State: TGridDrawState);
> begin
>
> //pokud bude field Locked True pak se zaznam zobrazi s cervenym fontem
> if DBGrid1.DataSource.DataSet.FieldByName('Locked').AsBoolean then
> DBGrid1.Canvas.Font.Color := clRed;
>
> //pokud by jste chtel vybarvit pozadi a ne font pak tam bude Brush misto
> Font, spoustu dalsich moznosti najdete v napovede pod TCanvas
>
> //nezapomenout zavolat puvodni funkci
> DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
>
> end;
>
> samo, ze k aktualne zobrazovanym datum
>
>
>
> > Zdravim,
> > Ma se menit barva vzhledem k zobrazovanym datum? Nebo se proste maji
> stridat
> > tyto tri barvy?
>
> ---
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.419 / Virus Database: 235 - Release Date: 13/11/2002
Odpovedá: Aleš Kerner
20. 11. 2002 15:52
> musis zjistit, jestli pri vykreslovani jsi na sudem nebo lichem radku :
-- tohle vim, ale jak zjistim ten sudy nebo lichy radek, neni problem
vymyslet stridani barev, ale zjistovani radku
delal jsem to takhle, (((Rect.Top div (Rect.Bottom - Rect.Top + 1)) mod 2) =
0), ale je problem,
pokud se posunuji sipkou dolu, tak posledni radek je vzdy sudy¨(lichy) a
stridani je v pr....
Pri page up a page down to docela funguje
>
> Obsluha udalosti OnDrawColumnCell
>
> procedure TUkaz.gridUkazDrawColumnCell(Sender: TObject;
> const Rect: TRect; DataCol: Integer; Column: TColumn;
> State: TGridDrawState);
>
> function StojimNaSudemRadku: Boolean
> begin
> { nejaka funkce na zjisteni sudeho radku }
> Result := (SudyRadek);
> end;
> begin
> {spusti se s vykreslenim kazdeho sloupce }
> with Sender as TDBGrid do begin
> if StojimNaSudemRadku then
> if gdSelected in State then begin
> Canvas.Brush.Color := clHighLight;
> Canvas.Font.Color := clLime;
> end
> else begin
> Canvas.Brush.Color := clLime ;
> Canvas.Font.Color := clInfoText;
> end
> else
> if gdSelected in State then begin
> Canvas.Brush.Color := clHighLight;
> Canvas.Font.Color := clRed;
> end
> else begin
> Canvas.Brush.Color := clRed ;
> Canvas.Font.Color := clInfoText;
> end;
> end;
> end;
> gridUkaz.DefaultDrawColumnCell(Rect, DataCol, Column, State);
> end;
>
> ------
> S pozdravem Karel Horky
> horky.karel@quick.cz
> W2K/SP2, D5Ent/UP1
>
Odpovedá: Karel Horky
21. 11. 2002 8:18
Aleš Kerner, <mailto:kerner@metalcom.cz> napsal:
>> musis zjistit, jestli pri vykreslovani jsi na sudem nebo lichem radku :
AK> -- tohle vim, ale jak zjistim ten sudy nebo lichy radek, neni problem
AK> vymyslet stridani barev, ale zjistovani radku
Opravdu nepises, v jakem Gridu, napr. ve StringGridu mas vlastnost
Row, ta muze poslouzit.
Dalsi moznosti je mit nejakou posloupnost primo v datech, kdyz uz tam
chces mit stridani barev.
------
S pozdravem Karel Horky
horky.karel@quick.cz
W2K/SP2, D5Ent/UP1
Odpovedá: ing. Jan Fiala
21. 11. 2002 8:50
Staci iDBGrid pretypovat na TStringGrid a pak budou k dispozici Row a
Col udaje
TStringGrid(DBGrid).Row
--
ing. Jan Fiala
mailto:jan.fiala@iol.cz
> Aleš Kerner, <mailto:kerner@metalcom.cz> napsal:
>> -- tohle vim, ale jak zjistim ten sudy nebo lichy radek, neni problem
>> vymyslet stridani barev, ale zjistovani radku
Odpovedá: Petr Palicka
21. 11. 2002 10:37
> .....ale jak zjistim ten sudy nebo lichy radek.....
pokud se jedna o TDBGrid, tak by melo jit pouzit
x:=DBGrid1.DataSource.DataSet.RecNo;
v x by mohlo byt cislo vety v tabulce, pokud ti
jde o to, aby liche vety v DBGridu meli jinou barvu,
nez sude.
peca
Odpovedá: Martin Schayna
21. 11. 2002 11:40
----- Original Message -----
From: "ing. Jan Fiala" <jan.fiala@iol.cz>
> Staci iDBGrid pretypovat na TStringGrid a pak budou k dispozici Row a
> Col udaje
> TStringGrid(DBGrid).Row
To je zajimava myslenka.
U me v D5 je to takhle:
TStringGrid ma predky --> TDrawGrid --> TCustomGrid
TDBGrid ma predky --> TCustomGrid
Property Row je deklarovana na TCustomGridu v sekci protected,
na TDrawGridu je zverejnena v public bez uprav. Takze kod
TStringGrid(TDBGrid).Row bude fungovat, ale pouze tehdy pokud
se v nejake pristi verzi nezmeni deklarace property Row v tride
TDrawGrid nebo TStringGrid.
Spravnejsi by podle me bylo zadeklarovat vlastniho potomka
TCustomGridu pouze pro zverejneni Row:
type
TFakeCustomGrid = class(TCustomGrid)
public
property Row;
end;
a pak pouzit TFakeCustomGrid(TDBGrid).Row
Martin Schayna
Odpovedá: Ondrej Kelle
21. 11. 2002 11:34
> Spravnejsi by podle me bylo zadeklarovat vlastniho potomka
> TCustomGridu pouze pro zverejneni Row:
>
> type
> TFakeCustomGrid = class(TCustomGrid)
> public
> property Row;
> end;
>
> a pak pouzit TFakeCustomGrid(TDBGrid).Row
Nie je potrebne nic zverejnovat, staci
type
TFakeCustomGrid = class(TCustomGrid);
a mas pristup k protected sekcii TCustomGrid.
TOndrej